package com.aizuda.oss.strategy;

import java.io.InputStream;
import java.time.LocalDateTime;

import com.aizuda.oss.domain.OssMark;
import com.aizuda.oss.domain.OssMessage;
import com.aizuda.oss.properties.OssProperties;

import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.IdUtil;

/**
 *
 * <p>
 *
 * @author izyao
 * @since 2022/3/22
 */
public interface IOssStrategy {

    /**
     * 初始化
     * @param ossProperties
     */
    default void init(OssProperties ossProperties){}


    OssMessage upload(byte[] data);


    /**
     *  文件上传
     * @param inputStream
     * @return
     */
    OssMessage upload(InputStream inputStream);

    /**
     * 文件删除
     * @param pathName 文件露肩
     */
    void delete(String pathName);

    /**
     * 获取域名地址
     * @return
     */
    String getEndpointLink();

    /**
     * 生成日期文件路径
     * @return
     */
    default String getPath(){
        String uuid = IdUtil.fastSimpleUUID();
        String datePath = LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy/MM/dd");
        return datePath+"/"+uuid;
    }

    /**
     * 采用服务端签名后直传方案
     *
     * @return 签名
     * @author VampireAchao
     * @link https://help.aliyun.com/document_detail/31927.html
     */
    OssMark getMark();

}
